.\"
.\" This file and its contents are supplied under the terms of the
.\" Common Development and Distribution License ("CDDL"), version 1.0.
.\" You may only use this file in accordance with the terms of version
.\" 1.0 of the CDDL.
.\"
.\" A full copy of the text of the CDDL should have accompanied this
.\" source.  A copy of the CDDL is also available via the Internet at
.\" http://www.illumos.org/license/CDDL.
.\"
.\"
.\" Copyright 2019 Joyent, Inc.
.\"
.Dd December  2, 2019
.Dt PROC_WALK 3PROC
.Os
.Sh NAME
.Nm proc_walk
.Nd walk all processes or threads in /proc
.Sh SYNOPSIS
.Lb libproc
.In libproc.h
.Ft int
.Fo proc_walk
.Fa "proc_walk_f *func"
.Fa "void *arg"
.Fa "int flag"
.Fc
.Sh DESCRIPTION
The
.Fn proc_walk
function walks all threads and processes in /proc and calls the callback
function
.Fa func
once for each one with the user specified
.Fa arg .
The definition of the
.Sy proc_walk_f
is available in
.Xr libproc 3LIB .
.Pp
.Fa func
will be called once for each process and will always have its first
argument filled in with the value of the
.Sy psinfo
file of the process.
The value of
.Fa flag
controls whether or not information about the threads in the process are
included and how many times the callback function
.Fa func
is called.
The following values may be passed in for
.Fa flag :
.Bl -tag -width Dv -offset indent
.It Dv PR_WALK_PROC
Indicates that the walker is only concerned with the process.
.Fa func
will be called once for each process in the system.
Only the
.Sy psinfo
will be read for the process and passed to
.Fa func .
The second argument, the one for the
.Sy lwpsinfo_t ,
will be passed as
.Dv NULL .
.It Dv PR_WALK_LWP
The caller wants both process and thread information.
.Fa func
will be called once for each thread in the system.
In addition to the process
.Sy psinfo
information, the ps specific information for a given thread will be
included in the
.Fa lwpsinfo_t
argument.
.El
.Pp
In addition, the following values may be combined with one of the above
values of
.Fa flag
with a bitwise-inclusive-OR:
.Bl -tag -width Dv -offset indent
.It Dv PR_WALK_INCLUDE_SYS
Include
.Sy SYS
.Pq system
processes.
Normally
.Sy SYS
processes are skipped during the walk of the process tree.
.El
.Pp
The return value of the caller's
.Fa func
function determines whether or not iteration will continue.
If
.Fa func
returns a non-zero value, then iteration will terminate and that
return value will be returned to the caller.
To distinguish between system errors and caller errors, it is recommended that
the function only return positive integers in the event of an error.
.Sh RETURN VALUES
Upon successful completion, the
.Fn proc_walk
function returns
.Sy 0 .
Otherwise,
.Sy -1
is returned and
.Sy errno
is updated to reflect the error that occurred.
.Sh ERRORS
In addition to the errors listed below, the
.Fn proc_walk
function may fail for the same reasons as the
.Xr opendir 3C ,
.Xr readdir 3C ,
and
.Xr malloc 3C
functions.
.Bl -tag -width Er
.It Er EINVAL
.Fa flag
is not one of
.Dv PR_WALK_PROC
or
.Dv PR_WALK_LWP .
.El
.Sh INTERFACE STABILITY
.Sy Uncommitted
.Sh MT-LEVEL
.Sy MT-Safe
.Sh SEE ALSO
.Xr malloc 3C ,
.Xr opendir 3C ,
.Xr readdir 3C ,
.Xr libproc 3LIB ,
.Xr proc 5
